@@ -138,8 +138,14 @@ static int cmd_digitalinput_read(var_s *self, int argc, slib_par_t *arg, var_s *
138138static int cmd_opendigitalinput (int argc, slib_par_t *args, var_t *retval) {
139139 int result = 1 ;
140140 int pin = get_param_int (argc, args, 0 , -1 );
141+ uint8_t mode = get_param_int (argc, args, 1 , 1 );
142+ if (mode) {
143+ mode = INPUT_PULLUP;
144+ } else {
145+ mode = INPUT;
146+ }
141147 if (is_pin (pin)) {
142- set_pin (retval, pin, INPUT );
148+ set_pin (retval, pin, mode );
143149 v_create_callback (retval, " read" , cmd_digitalinput_read);
144150 result = 1 ;
145151 } else {
@@ -174,6 +180,56 @@ static int cmd_opendigitaloutput(int argc, slib_par_t *args, var_t *retval) {
174180 return result;
175181}
176182
183+ static int cmd_analogoutput_write (var_s *self, int argc, slib_par_t *arg, var_s *retval) {
184+ if (argc != 1 || !is_pin_object (self)) {
185+ error (retval, " AnalogOutput.write" , 1 );
186+ return 0 ;
187+ } else {
188+ int pin = self->v .m .id ;
189+ int value = get_param_int (argc, arg, 0 , 0 );
190+ analogWrite (pin, value);
191+ }
192+ return 1 ;
193+ }
194+
195+ static int cmd_analogoutput_frequency (var_s *self, int argc, slib_par_t *arg, var_s *retval) {
196+ if (argc != 1 || !is_pin_object (self)) {
197+ error (retval, " AnalogOutput.frequency" , 1 );
198+ return 0 ;
199+ } else {
200+ int pin = self->v .m .id ;
201+ double value = get_param_num (argc, arg, 0 , 0.0 );
202+ analogWriteFrequency (pin, value);
203+ }
204+ return 1 ;
205+ }
206+
207+ static int cmd_analogoutput_resolution (var_s *self, int argc, slib_par_t *arg, var_s *retval) {
208+ if (argc != 1 || !is_pin_object (self)) {
209+ error (retval, " AnalogOutput.resolution" , 1 );
210+ return 0 ;
211+ } else {
212+ int value = get_param_int (argc, arg, 0 , 0 );
213+ analogWriteResolution (value);
214+ }
215+ return 1 ;
216+ }
217+
218+ static int cmd_openanalogoutput (int argc, slib_par_t *args, var_t *retval) {
219+ int result;
220+ int pin = get_param_int (argc, args, 0 , -1 );
221+ if (is_pin (pin)) {
222+ set_pin (retval, pin, OUTPUT);
223+ v_create_callback (retval, " write" , cmd_analogoutput_write);
224+ v_create_callback (retval, " frequency" , cmd_analogoutput_frequency);
225+ v_create_callback (retval, " resolution" , cmd_analogoutput_resolution);
226+ result = 1 ;
227+ } else {
228+ result = 0 ;
229+ }
230+ return result;
231+ }
232+
177233static int cmd_get_temperature (int argc, slib_par_t *args, var_t *retval) {
178234 v_setint (retval, tempmonGetTemp ());
179235 return 1 ;
@@ -406,10 +462,11 @@ static FuncSpec lib_func[] = {
406462 {0 , 0 , " GETTEMP" , cmd_get_temperature},
407463 {0 , 0 , " GETCPUSPEED" , cmd_get_cpu_speed},
408464 {1 , 1 , " OPENANALOGINPUT" , cmd_openanaloginput},
465+ {1 , 1 , " OPENANALOGOUTPUT" , cmd_openanalogoutput},
409466 {1 , 1 , " OPENDIGITALINPUT" , cmd_opendigitalinput},
410467 {1 , 1 , " OPENDIGITALOUTPUT" , cmd_opendigitaloutput},
411468 {0 , 1 , " OPENSERIAL" , cmd_openserial},
412- {0 , 1 , " OPENI2C" , cmd_openi2c}
469+ {0 , 3 , " OPENI2C" , cmd_openi2c}
413470};
414471
415472static int teensy_func_count (void ) {
0 commit comments